home *** CD-ROM | disk | FTP | other *** search
- /****************************************************************
- *
- * UMEvents.c
- *
- * © 1992, Spider Island Software
- * Written by Chris Silverberg
- *
- * This file contains the code used to send AppleEvents to
- * UserManager. Each routine requires a TargetID to be
- * passed in. This ID can be obtained from the PPCBrowser
- * function.
- *
- **********************************************/
-
- #include <UMEvents.h>
-
-
- /**********************************
- *
- * SendStartUM
- *
- * This routine sends a 'Start User Manager' event to
- * User Manager. UM should open it's default user file
- * (usually 'TeleUsers') and prepare to respond to
- * Events.
- *
- ***************************/
-
- void ShowInt( Byte*, int );
- void ShowLong( Byte*, long );
-
- short SendStartUM( TargetID *tid, Byte *sessPassword, FSSpec *groupsFolder, FSSpec *userFile )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- short err, aeErr, myErr;
- long type, size;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass , umStartUM, &adsc, kAutoGenerateReturnID, kAnyTransactionID, &evt );
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) ( &sessPassword[1] ),
- (long) sessPassword[0] );
-
- if ( !err )
- { err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, 60*60*5 , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, sizeof( short ), (void *) &size );
-
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- if ( !err && !aeErr )
- { err = AEGetParamPtr( &reply, umUserFileSpec, typeFSS, (void *) &type,
- (void *) userFile, sizeof( FSSpec ), (void *) &size );
- //ShowInt("\puser file err ", err );
- //ShowLong( userFile->name, userFile->parID );
-
- }
- if ( !err && !aeErr )
- { err = AEGetParamPtr( &reply, umAGFolderSpec, typeFSS, (void *) &type,
- (void *) groupsFolder , sizeof( FSSpec ), (void *) &size );
- //ShowInt("\p groupsFolder file err ", err );
- //ShowLong(groupsFolder->name, groupsFolder->parID );
-
- }
- myErr = AEDisposeDesc( &reply );
- }
- }
-
- myErr = AEDisposeDesc( &evt );
- }
-
- myErr = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendAddUser
- *
- * This routine sends an 'Add User' event to
- * User Manager. Passed in is a target ID
- * and a UserRecord which should contain all the
- * fields for the user.
- *
- ***************************/
-
- short SendAddUser( TargetID *tid, Byte *sessPassword, UserRecord *theUser )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umAddUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) ( &sessPassword[1] ),
- (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserRecord, typeWildCard, (void *) theUser,
- sizeof( UserRecord ) );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- myErr = AEDisposeDesc( &reply );
- }
-
- myErr = AEDisposeDesc( &evt );
- }
- myErr = AEDisposeDesc( &adsc );
- }
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendChangeUser
- *
- * This routine sends a 'Change User' event to
- * User Manager. Passed in is a target ID, a username,
- * and the new user record to be replaced. The name may
- * be changed if the username in the UserRecord is different
- * than the passed in username.
- *
- ***************************/
-
- short SendChangeUser( TargetID *tid, Byte *sessPassword, Byte *userName, UserRecord *theUser )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umChangeUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1], (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &userName[1], (long)userName[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserRecord, typeWildCard, (void *) theUser, (long)sizeof( UserRecord ) );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- myErr = AEDisposeDesc( &reply );
- }
-
- myErr = AEDisposeDesc( &evt );
- }
-
- myErr = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendGetUser
- *
- * This routine sends a 'Get User' event to
- * User Manager. Passed in is a target ID,
- * a username, and a UserRecord. If the user
- * is found, the record will be passed back.
- *
- ***************************/
-
- short SendGetUser( TargetID *tid, Byte *sessPassword, Byte *theUserName, UserRecord *theUser )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umGetUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1],
- (long)sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &theUserName[1], (long) theUserName[0] );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL ) ;
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- if ( !err && !aeErr )
- err = AEGetParamPtr( &reply, umUserRecord, typeWildCard, (void *) &type,
- (void *) theUser, (long)sizeof( UserRecord ), (void *) &size );
-
- myErr = AEDisposeDesc( &reply );
- }
- myErr = AEDisposeDesc( &evt );
- }
- myErr = AEDisposeDesc( &adsc );
- }
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendDeleteUser
- *
- * This routine sends a 'Delete User' event to
- * User Manager. Passed in is a target ID
- * and a username.
- *
- ***************************/
-
- short SendDeleteUser( TargetID *tid, Byte *sessPassword, Byte *theUserName )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umDeleteUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1],
- (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &theUserName[1],
- (long)theUserName[0] );
-
- if ( !err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- myErr = AEDisposeDesc( &reply );
- }
-
- myErr = AEDisposeDesc( &evt );
- }
- myErr = AEDisposeDesc( &adsc );
- }
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendCreateUser
- *
- * This routine sends a 'Create User' event to
- * User Manager. Passed in is a target ID,
- * a username, password, and phone number in strings.
- * User Manager will create a new user based on this
- * information and the default values.
- *
- ***************************/
-
- short SendCreateUser( TargetID *tid, Byte *sessPassword, Byte *userName, Byte *userPassword,
- Byte *userPhone )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umCreateUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1],
- (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &userName[1],
- (long)userName[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserPassword, typeChar, (void *) &userPassword[1],
- (long)userPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserPhone, typeChar, (void *) &userPhone[1],
- (long)userPhone[0] );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, (long)sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- myErr = AEDisposeDesc( &reply );
- }
-
- myErr = AEDisposeDesc( &evt );
- }
-
- myErr = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendUpdateUser
- *
- * This routine sends an update user event
- * to a program. Passed is the session password,
- * username, and a userrecord that has various
- * delta values. The files that should be
- * valid in this user record are:
- *
- * GEH uses this when a user logs off to update stats
- *
- * totalTime delta seconds online
- * kb_uploaded delta kilobytes uploaded
- * kb_downloaded delta kilobytes downloaded
- * email_sent delta num email messages sent
- * msgs_posted delta num topic msgs posted
- *
- * lastUpdate startof this logon ( mac time in secs )
- *
- * User Manager will also change these fields
- *
- * LogonsMax is incremented by the num of minutes in delta total time
- * MaxTime is decremented by the elapsed minutes if the user has an "absolute"
- * logon limit
- * LastDay changes to lastUpdate if a day has elapsed
- *
- * totalCalls +1
- * LogonsToday +1
- *
- ***********************************************/
-
- short SendUpdateUser( TargetID *tid, Byte *sessPassword, Byte *userName, UserRecord *theUser )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
- if ( !err )
- {
- err = AECreateAppleEvent ( umClass, umUpdateUser, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- {
- err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) ( &sessPassword[1] ),
- (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &userName[1],
- (long)userName[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserRecord, typeWildCard, (void *) theUser,
- (long)sizeof( UserRecord ) );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, (long)sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- err = AEDisposeDesc( &reply );
- }
- err = AEDisposeDesc( &evt );
- }
- err = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /***************************************
- *
- * SendChangePassword
- *
- * This routine sends a change password
- * event to a program. Passed in are the
- * session password, the user name (pascal string),
- * and the new password.
- *
- *******************************/
-
- short SendChangePassword( TargetID *tid, Byte *sessPassword, Byte *userName, Byte *password )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr;
- long type, size;
- UserRecord userData;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- {
- err = AECreateAppleEvent ( umClass, umChangePassword, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- {
- err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1],
- (long) sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &userName[1],
- userName[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umUserPassword, typeChar, (void *) &password[1],
- (long) password[0] );
-
- if ( !err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, (long)sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- err = AEDisposeDesc( &reply );
- }
- err = AEDisposeDesc( &evt );
- }
- err = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendScanUsers
- *
- * This routine allows the client to easily scan
- * the user file that the server is using. The variables:
- *
- * tid target ID of server
- * password session password
- * lastUser the last user that was scanned. empty string
- * if this is the first access in a scan.
- * currentUser the space where the new user's name will be stored.
- * goForward if this is true, the search will be a forward search.
- * otherwise it will be backwards.
- * doLoadUser if this is true, the user will be fetched from the
- * file. Otherwise, just the name will be accesses
- * from the index file.
- * theUser where the user record will be stored if doLoadUser is true.
- *
- ***************************/
-
- short SendScanUsers( TargetID *tid, Byte *sessPassword, Byte *lastUser, Byte *currentUser,
- short goForward, short doLoadUser, UserRecord *theUser )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr;
- long type, size;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- {
- err = AECreateAppleEvent ( umClass, umScanUsers, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- {
- err = AEPutParamPtr ( &evt, umPassword, typeChar, (void *) &sessPassword[1],
- (long)sessPassword[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umLastUser, typeChar, (void *) &lastUser[1],
- (long)lastUser[0] );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umGoForward, typeSMInt, (void *) &goForward,
- (long)sizeof( short ) );
-
- if ( !err )
- err = AEPutParamPtr ( &evt, umDoLoadUser, typeSMInt, (void *) &doLoadUser,
- (long)sizeof( short ) );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL ) ;
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, (long)sizeof( short ), (void *) &size );
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- if ( !err && !aeErr )
- err = AEGetParamPtr( &reply, umUserName, typeChar, (void *) &type,
- (void *) ¤tUser[1], (long)U_NAME_MAX, (void *) &size );
- if ( !err )
- { if ( size > U_NAME_MAX - 1 )
- size = U_NAME_MAX - 1;
- currentUser[0] = (Byte)size;
- }
- else
- currentUser[0] = 0;
-
- if ( !err && !aeErr )
- err = AEGetParamPtr( &reply, umUserRecord, typeWildCard, (void *) &type,
- (void *) theUser, (long)sizeof( UserRecord ), (void *) &size );
-
- err = AEDisposeDesc( &reply );
- }
- err = AEDisposeDesc( &evt );
- }
-
- err = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /************************************
- *
- * SendGetMailPath
- *
- * This routine will pass back the mailpath for a user.
- * Since this is a public routine, no password is necessary.
- *
- *****************************/
-
- short SendGetMailPath( TargetID *tid, Byte *userName, FSSpec *mailFSSpec )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- Handle h;
- short err, aeErr = noErr, myErr;
- long type, size;
-
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( umClass, umGetMailPath, &adsc, kAutoGenerateReturnID, kAnyTransactionID, &evt );
-
- if ( !err )
- { err = AEPutParamPtr ( &evt, umUserName, typeChar, (void *) &userName[1], (long)userName[0] );
-
- if ( ! err )
- err = AESend ( &evt , &reply , kAEWaitReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL ) ;
-
- if ( !err )
- {
- err = AEGetParamPtr( &reply, keyErrorNumber, typeSMInt, (void *) &type,
- (void *) &aeErr, (Size)sizeof( short ), (void *) &size );
-
- if ( err == errAEDescNotFound )
- {
- err = noErr;
- aeErr = noErr;
- }
-
- if ( !err && !aeErr )
- err = AEGetParamPtr( &reply, umMailPath, typeFSS, (void *) &type,
- (void *) mailFSSpec, (Size)sizeof(FSSpec) , (void *) &size );
-
- myErr = AEDisposeDesc( &reply );
- }
- myErr = AEDisposeDesc( &evt );
- }
- myErr = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( aeErr );
- else
- return( err );
- }
-
-
- /**********************************
- *
- * SendQuitApp
- *
- * This routine sends a 'Quit User' event to a
- * program. Passed in is the target ID.
- *
- ***************************/
-
- short SendQuitApp( TargetID *tid )
- {
- AppleEvent evt, reply;
- AEAddressDesc adsc = { 0,0 };
- short err, myErr;
-
- err = AECreateDesc ( typeTargetID, (void *) tid, sizeof( TargetID ), &adsc ) ;
-
- if ( !err )
- { err = AECreateAppleEvent ( kCoreEventClass , kAEQuitApplication, &adsc, kAutoGenerateReturnID,
- kAnyTransactionID, &evt ) ;
-
- if ( !err )
- { err = AESend ( &evt , &reply , kAENoReply | kAENeverInteract | kAEWantReceipt,
- kAENormalPriority, kAEDefaultTimeout , NULL , NULL );
-
- if ( !err )
- myErr = AEDisposeDesc( &reply );
-
- myErr = AEDisposeDesc( &evt );
- }
-
- myErr = AEDisposeDesc( &adsc );
- }
-
- if ( !err )
- return( noErr );
- else
- return( err );
- }
-
-